package com.googlecode.struts2.action;

import java.lang.reflect.Method;
import java.util.Map;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.mapper.ActionMapping;

public class BaseDispatcherAction {

	// default
	public Object execute() throws Exception {
//		String defaultMethodName = getParams("defaultMethod");
		String defaultMethodName = "init";
        Method method = null;
        try {
            method = getClass().getMethod(defaultMethodName, new Class[0]);
        } catch (NoSuchMethodException e) {
        	throw e;
        }		
        return method.invoke(this, new Object[0]);
	}
	
	// ActionMappingのパラメーターを取得します。
	//　案①　ActionMappingインスタンスを取得して、パラメーターを取得します。
	//　案②はActionMapper#ActionMappingでパラメーターをrequestのパラメーターに格納します。Actionで他のrequestパラメーターと同じで取得します。
	protected String getParams(String... args) {
		// ActionMappingのインスタンス
		ActionMapping actionMapping = ServletActionContext.getActionMapping();
		// パラメーター
		Map<String, Object> parameterMap = actionMapping.getParams();
		
		String parameterKey = null;
		// デフォルトパラメーターキー
		if (args == null || args.length == 0) {
			parameterKey = "id";
		} else {
			parameterKey = args[0];
		}
		if (!parameterMap.containsKey(parameterKey)) {
			return null;
		} else {
			return parameterMap.get(parameterKey).toString();
		}
	}
}
